package chixing.day20.proxy.homework.work3;

import java.time.LocalDate;
import java.util.HashMap;
import java.util.Map;

public class Count {
    private static Map<Integer, Product> productMap = new HashMap<>();
    private static Map<Integer, FlashSale> flashSaleMap = new HashMap<>();

    public void fun() {
        Product product = new Product(1, "手机", 100, 20);
        LocalDate date1 = LocalDate.of(2025, 8, 8);
        LocalDate date2 = LocalDate.of(2026, 8, 8);
        FlashSale flashSale = new FlashSale(1, 0.9, date1, date2);

        productMap.put(product.getProductId(), product);
        flashSaleMap.put(flashSale.getProductId(), flashSale);
    }
    /*
    用户下单时：
    判断库存是否充足
    若在限时活动期间，则按折扣计算价格
    扣减库存
    */

    /**
     *
     * @param order 订单信息
     * @return 要输出的结果
     */
    public synchronized Result record(Order order) {
        Result result = null;
        double discountPrice = 0;//最后支付的价格
        int stock = 0;//result里面的库存数
        //1.先判断是否存在这件商品
        if (productMap.containsKey(order.getProductId())) {//这件商品存在
            Product product = productMap.get(order.getProductId());
            //2.库存是否充足 库存充足就把商品库存减掉
            if (product.getProductStock() >= order.getQuantity()) {
                product.setProductStock(product.getProductStock() - order.getQuantity());
                stock=product.getProductStock();
            } else {
                System.out.println("库存不足！该商品还剩： " + product.getProductStock() + "件");
                return result;
            }
            //3.判断是否在活动期间  若在限时活动期间，则按折扣计算价格
            LocalDate startTime = flashSaleMap.get(order.getProductId()).getStartTime();
            LocalDate endTime = flashSaleMap.get(order.getProductId()).getEndTime();
            if (order.getLocalDate().isAfter(startTime) && order.getLocalDate().isBefore(endTime)) {
                //先拿到折扣率
                double discount = flashSaleMap.get(order.getProductId()).getDiscount();
                //计算出折扣后的价格
                discountPrice += (productMap.get(order.getProductId()).getProductPrice() * discount) * order.getQuantity();
            }
            result = new Result(order.getOrderId(), product.getProductName(), order.getQuantity(), discountPrice, stock);
        } else {
            return result;
        }
        return result;
    }

}
